В прошлом шаге мы говорили, что перед инициализацией надо устанавливать свойства соединения. Основой для устaновки свойств является структураDBPROP. Она вот такая:
typedef struct tagDBPROP
{
DBPROPID dwPropertyID; // Идентификатор свойств
DBPROPOPTIONS dwOptions; // Опции
DBPROPSTATUS dwStatus; // статус результата. Например если провайдер не поддерживает
// это свойство, то вернется DBPROPSTATUS_NOTSUPPORTED
DBID colid; // Необязательное ID для колонки. Если ко всем колонкам, то надо
//устанавливать в DB_NULLID
VARIANT vValue; // Значение свойства.
} DBPROP;
Так вот, чтобы произвести инициализацию соединения с OLE провайдером нам нужен массив свойств, в котором определены параметры, например такие, как источник строк, пароль доступа и так далее. Этот массив и передается для инициализации. Объявить его можно так:
DBPROP InitProperties[nProps];
Только поместить этот массив нужно в специальную структуру набора свойств - DBPROPSET:
typedef struct tagDBPROPSET
{
DBPROP * rgProperties; // Указатель на массив структур
ULONG cProperties; // Число свойств в наборе
GUID guidPropertySet; // GUID для идентификации
} DBPROPSET;
Объявить можно так:
DBPROPSET rgInitPropSet;
Но, в принципе, все просто - для инициализации нужен набор свойств. Только одно свойство в одной специальной структуре. Эти структуры собираются в массив, который и передается для инициализации. А передать можно так.
rgInitPropSet.guidPropertySet = DBPROPSET_DBINIT; rgInitPropSet.cProperties = nProps; rgInitPropSet.rgProperties = InitProperties;

После заполнения массива можно попросить интерфейс IDBInitialize для установки свойств.
pIDBInitialize->QueryInterface(IID_IDBProperties, (void**) &pIDBProperties);
И получив его установить свойства соединения.
hr = pIDBProperties->SetProperties(1, &rgInitPropSet);